<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/export.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/export.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0VYUE9SVF9IXzA_"><span class="b">_LINUX_EXPORT_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0VYUE9SVF9IXzA_"><span class="b">_LINUX_EXPORT_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> <span class="k">/*</span>
<a name="4" /><span class="Maybe">       4:</span> <span class="k"> * Export symbols from the kernel to modules.  Forked from module.h</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="k"> * to reduce the amount of pointless cruft we feed to gcc when only</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="k"> * exporting a simple symbol or two.</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="k"> *</span>
<a name="8" /><span class="Maybe">       8:</span> <span class="k"> * Try not to add #includes here.  It slows compilation and makes kernel</span>
<a name="9" /><span class="Maybe">       9:</span> <span class="k"> * hackers place grumpy comments in header files.</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="k"> */</span>
<a name="11" /><span class="Maybe">      11:</span> 
<a name="12" /><span class="Maybe">      12:</span> <span class="k">/* Some toolchains use a `_&apos; prefix for all user symbols. */</span>
<a name="13" /><span class="False">      13:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX</span>
<a name="14" /><span class="False">      14:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19WTUxJTlVYX1NZTUJPTF8w"><span class="b">__VMLINUX_SYMBOL</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="b">_</span><span class="f">##</span><span class="b">x</span>
<a name="15" /><span class="False">      15:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19WTUxJTlVYX1NZTUJPTF9TVFJfMA__"><span class="b">__VMLINUX_SYMBOL_STR</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="e">&quot;_&quot;</span> <span class="f">#</span><span class="b">x</span>
<a name="16" /><span class="Maybe">      16:</span> <span class="f">#</span><span class="n">else</span>
<a name="17" /><span class="Maybe">      17:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19WTUxJTlVYX1NZTUJPTF8w"><span class="b">__VMLINUX_SYMBOL</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="b">x</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19WTUxJTlVYX1NZTUJPTF9TVFJfMA__"><span class="b">__VMLINUX_SYMBOL_STR</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">#</span><span class="b">x</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="f">#</span><span class="n">endif</span>
<a name="20" /><span class="Maybe">      20:</span> 
<a name="21" /><span class="Maybe">      21:</span> <span class="k">/* Indirect, so macros are expanded before pasting. */</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Vk1MSU5VWF9TWU1CT0xfMA__"><span class="b">VMLINUX_SYMBOL</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_X19WTUxJTlVYX1NZTUJPTF8w"><span class="b">__VMLINUX_SYMBOL</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="23" /><span class="Maybe">      23:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Vk1MSU5VWF9TWU1CT0xfU1RSXzA_"><span class="b">VMLINUX_SYMBOL_STR</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19WTUxJTlVYX1NZTUJPTF9TVFJfMA__"><span class="b">__VMLINUX_SYMBOL_STR</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="24" /><span class="Maybe">      24:</span> 
<a name="25" /><span class="Maybe">      25:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="26" /><span class="Maybe">      26:</span> <span class="m">struct</span> <span class="b">kernel_symbol</span>
<a name="27" /><span class="Maybe">      27:</span> <span class="f">{</span>
<a name="28" /><span class="Maybe">      28:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">value</span><span class="f">;</span>
<a name="29" /><span class="Maybe">      29:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">;</span>
<a name="30" /><span class="Maybe">      30:</span> <span class="f">}</span><span class="f">;</span>
<a name="31" /><span class="Maybe">      31:</span> 
<a name="32" /><span class="False">      32:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">MODULE</span>
<a name="33" /><span class="False">      33:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">module</span> <span class="b">__this_module</span><span class="f">;</span>
<a name="34" /><span class="False">      34:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VEhJU19NT0RVTEVfMA__"><span class="b">THIS_MODULE</span></a> <span class="f">(</span><span class="f">&amp;</span><span class="b">__this_module</span><span class="f">)</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="f">#</span><span class="n">else</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_VEhJU19NT0RVTEVfMA__"><span class="b">THIS_MODULE</span></a> <span class="f">(</span><span class="f">(</span><span class="m">struct</span> <span class="b">module</span> <span class="f">*</span><span class="f">)</span><span class="c">0</span><span class="f">)</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="f">#</span><span class="n">endif</span>
<a name="38" /><span class="Maybe">      38:</span> 
<a name="39" /><span class="Maybe">      39:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX01PRFVMRVNfMA__"><span class="b">CONFIG_MODULES</span></a>
<a name="40" /><span class="Maybe">      40:</span> 
<a name="41" /><span class="Maybe">      41:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__GENKSYMS__</span>
<a name="42" /><span class="Maybe">      42:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX01PRFZFUlNJT05TXzA_"><span class="b">CONFIG_MODVERSIONS</span></a>
<a name="43" /><span class="Maybe">      43:</span> <span class="k">/* Mark the CRC weak since genksyms apparently decides not to</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> * generate a checksums for some symbols */</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19DUkNfU1lNQk9MXzA_"><span class="b">__CRC_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>                    \
<a name="46" /><span class="Maybe">      46:</span>     <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_X192aXNpYmxlXzA_"><span class="b">__visible</span></a> <span class="m">void</span> <span class="f">*</span><span class="b">__crc_</span><span class="f">##</span><span class="b">sym</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">weak</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="47" /><span class="Maybe">      47:</span>     <span class="m">static</span> <span class="m">const</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">__kcrctab_</span><span class="f">##</span><span class="b">sym</span>        \
<a name="48" /><span class="Maybe">      48:</span>     <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>                            \
<a name="49" /><span class="Maybe">      49:</span>     <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;___kcrctab&quot;</span> <span class="b">sec</span> <span class="e">&quot;+&quot;</span> <span class="f">#</span><span class="b">sym</span><span class="f">)</span><span class="f">,</span> <span class="b">unused</span><span class="f">)</span><span class="f">)</span>    \
<a name="50" /><span class="Maybe">      50:</span>     <span class="f">=</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span> <span class="f">&amp;</span><span class="b">__crc_</span><span class="f">##</span><span class="b">sym</span><span class="f">;</span>
<a name="51" /><span class="False">      51:</span> <span class="f">#</span><span class="n">else</span>
<a name="52" /><span class="False">      52:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19DUkNfU1lNQk9MXzA_"><span class="b">__CRC_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>
<a name="53" /><span class="Maybe">      53:</span> <span class="f">#</span><span class="n">endif</span>
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="k">/* For every exported symbol, place a struct in the __ksymtab section */</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>                \
<a name="57" /><span class="Maybe">      57:</span>     <span class="m">extern</span> <span class="b">typeof</span><span class="f">(</span><span class="b">sym</span><span class="f">)</span> <span class="b">sym</span><span class="f">;</span>                    \
<a name="58" /><span class="Maybe">      58:</span>     <a href="cpu.c_macros_ref.html#_X19DUkNfU1lNQk9MXzA_"><span class="b">__CRC_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>                    \
<a name="59" /><span class="Maybe">      59:</span>     <span class="m">static</span> <span class="m">const</span> <span class="m">char</span> <span class="b">__kstrtab_</span><span class="f">##</span><span class="b">sym</span><span class="f">[</span><span class="f">]</span>            \
<a name="60" /><span class="Maybe">      60:</span>     <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;__ksymtab_strings&quot;</span><span class="f">)</span><span class="f">,</span> <span class="b">aligned</span><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="f">)</span><span class="f">)</span> \
<a name="61" /><span class="Maybe">      61:</span>     <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Vk1MSU5VWF9TWU1CT0xfU1RSXzA_"><span class="b">VMLINUX_SYMBOL_STR</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span><span class="f">;</span>                \
<a name="62" /><span class="Maybe">      62:</span>     <a href="cpu.c_macros_ref.html#_X192aXNpYmxlXzA_"><span class="b">__visible</span></a> <span class="m">const</span> <span class="m">struct</span> <span class="b">kernel_symbol</span> <span class="b">__ksymtab_</span><span class="f">##</span><span class="b">sym</span>    \
<a name="63" /><span class="Maybe">      63:</span>     <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>                            \
<a name="64" /><span class="Maybe">      64:</span>     <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;___ksymtab&quot;</span> <span class="b">sec</span> <span class="e">&quot;+&quot;</span> <span class="f">#</span><span class="b">sym</span><span class="f">)</span><span class="f">,</span> <span class="b">unused</span><span class="f">)</span><span class="f">)</span>    \
<a name="65" /><span class="Maybe">      65:</span>     <span class="f">=</span> <span class="f">{</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">&amp;</span><span class="b">sym</span><span class="f">,</span> <span class="b">__kstrtab_</span><span class="f">##</span><span class="b">sym</span> <span class="f">}</span>
<a name="66" /><span class="Maybe">      66:</span> 
<a name="67" /><span class="Maybe">      67:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF8w"><span class="b">EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>                    \
<a name="68" /><span class="Maybe">      68:</span>     <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="e">&quot;&quot;</span><span class="f">)</span>
<a name="69" /><span class="Maybe">      69:</span> 
<a name="70" /><span class="Maybe">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF9HUExfMA__"><span class="b">EXPORT_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>                    \
<a name="71" /><span class="Maybe">      71:</span>     <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="e">&quot;_gpl&quot;</span><span class="f">)</span>
<a name="72" /><span class="Maybe">      72:</span> 
<a name="73" /><span class="Maybe">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFXzA_"><span class="b">EXPORT_SYMBOL_GPL_FUTURE</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>                \
<a name="74" /><span class="Maybe">      74:</span>     <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="e">&quot;_gpl_future&quot;</span><span class="f">)</span>
<a name="75" /><span class="Maybe">      75:</span> 
<a name="76" /><span class="Maybe">      76:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1VOVVNFRF9TWU1CT0xTXzA_"><span class="b">CONFIG_UNUSED_SYMBOLS</span></a>
<a name="77" /><span class="Maybe">      77:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfMA__"><span class="b">EXPORT_UNUSED_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="e">&quot;_unused&quot;</span><span class="f">)</span>
<a name="78" /><span class="Maybe">      78:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMXzA_"><span class="b">EXPORT_UNUSED_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19FWFBPUlRfU1lNQk9MXzA_"><span class="b">__EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">,</span> <span class="e">&quot;_unused_gpl&quot;</span><span class="f">)</span>
<a name="79" /><span class="False">      79:</span> <span class="f">#</span><span class="n">else</span>
<a name="80" /><span class="False">      80:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfMA__"><span class="b">EXPORT_UNUSED_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="81" /><span class="False">      81:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMXzA_"><span class="b">EXPORT_UNUSED_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="f">#</span><span class="n">endif</span>
<a name="83" /><span class="Maybe">      83:</span> 
<a name="84" /><span class="Maybe">      84:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __GENKSYMS__ */</span>
<a name="85" /><span class="Maybe">      85:</span> 
<a name="86" /><span class="False">      86:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* !CONFIG_MODULES... */</span>
<a name="87" /><span class="False">      87:</span> 
<a name="88" /><span class="False">      88:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF8w"><span class="b">EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="89" /><span class="False">      89:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF9HUExfMA__"><span class="b">EXPORT_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="90" /><span class="False">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFXzA_"><span class="b">EXPORT_SYMBOL_GPL_FUTURE</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="91" /><span class="False">      91:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfMA__"><span class="b">EXPORT_UNUSED_SYMBOL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="92" /><span class="False">      92:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMXzA_"><span class="b">EXPORT_UNUSED_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>
<a name="93" /><span class="False">      93:</span> 
<a name="94" /><span class="Maybe">      94:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_MODULES */</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !__ASSEMBLY__ */</span>
<a name="96" /><span class="Maybe">      96:</span> 
<a name="97" /><span class="True">      97:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_EXPORT_H */</span>
<a name="98" /><span class="True">      98:</span> </pre>
  </body>
</html>
